#include<stdio.h>

/*
真题练习：寻找完美数

        ​完美数​​（Perfect number）定义：如果一个数恰好等于它的真因子（即除了自身以外的因子）之和，则称该数为"完美数"。
    例如：
        6的真因子有1、2、3，而1+2+3=6
        28的真因子有1、2、4、7、14，而1+2+4+7+14=28
    任务要求：
        编写一个程序，要求用户输入一个正整数n，然后输出n以内的所有完美数（包括6、28等）。如果没有完美数，则输出"没有找到完美数"。
*/
int main()
{
    int n;
    printf("输入一个正整数:\n");
    scanf("%d",&n);
    int count =0;
    for (int i = 2;i<=n;i++)
  //for (int i = 6;i<=n;i++)    最小的完美数为6,可以考虑从6开始
    {
        int sum =0;
        for (int a = 1;a<i;a++)
      //for (int a = 1;a < i/2; a++)    大于i/2的数不可能是i的因子（除了i本身）
            i%a==0 ? sum +=a :0;
        if(sum == i)
        {
            printf("数字%d是完美数\n",i);
            count++;
        }
    }
    if (count == 0)
    {
        printf("没有找到完美数\n");
    }

    return 0;
}